# 这是docker运行jar包的基础镜像 jre基础镜像 https://blog.csdn.net/weixin_48835367/article/details/122993320
# 此镜像本人制作 运行此Dockerfile文件时建议 把此Dockerfile文件+xx.jar单独放到一个文件夹，然后执行 `docker build .`
FROM node102:5000/ssx-jre-base:8

# 作者
MAINTAINER ssx <ssx17852015601@163.com>

#因为容器运行后可能一直产生日志文件，导致容器数据变大，合理利用挂载点
# 容器挂载的意思就是容器内部的某个目录映射到宿主机某个目录，操作容器内部的这个目录相当于操作宿主机的某个目录(例如容器内部创建了一个文件，那么意味着你在宿主机目录也创建了一个文件)
# VOLUME 声明容器内挂载点“/home/shenshuxin/apps/spring-app”挂载到宿主机的某个目录，注意宿主机的“某个目录”是由docker自己生成的，
#    VOLUME作用就是当你docker run命令的时候如果没有指定-v参数，也会有一个挂载
#
# Dockerfile文件的VOLUME 和 docker run命令的-v之间的关系：（以本模板为例）
#    1. 如果docker run命令没有指定-v 最终容器运行后只会有一个挂载（容器内部/home/shenshuxin/apps/spring-app 与宿主机/xx/xx）
#       注意此“宿主机/xx/xx”是由docker自己生成的，可以通过docker inspect 容器ID 查看"Mounts"中的信息
#    2. 如果docker run命令指定了-v参数（例 docker run -v /log:/app/log ），最终容器运行会有两个挂载点
#           * 容器内部/home/shenshuxin/apps/spring-app 和 宿主机/xx/xx  这是Dockerfile文件的VOLUME指定的
#           * 容器内部/app/log 和 宿主机/log  这是docker run -v命令指定的
#       注意如果是docker run -v /hello:/home/shenshuxin/apps/spring-app的话，那么最终只有一个挂载点，Dockerfile文件的VOLUME挂载被覆盖了
#
# 最后说一下挂载的目的：在容器内部运行jar包，其产生的日志文件是我需要关心的，例如在容器内部执行java -jar xx.jar --log.dir=/spring/log 这里自定义配置日志文件路径
#   然后我想要查看/spring/log中的日志，我需要执行"docker exec --it 容器ID /bin/bash"先进入容器，然后找到/spring/log中的日志。
#   上面的方式显然费劲，我们可以通过挂载点来简单实现：
#                                           在Dockerfile文件的VOLUME指定： VOLUME /spring/log
#                                           接下来运行容器docker run -v /data/log:/spring/log
#                                           最终查看日志只需要在宿主机的/data/log中查看即可

# 第一个是本jar包日志输出位置 第二个是tomcat数据存储位置
VOLUME /myapplog /tmp

# 宿主机中的文件复制到容器中，宿主机文件 容器内部路径。若容器内部路径不存在则自动创建
COPY springboot-mysql-curd-1.0-RELEASE.jar /myappjar/app.jar

#声明容器内部开放端口
EXPOSE 8080

# RUN只在docker build生效，在容器中运行命令 保证命令完整性 ,发现还是不行，那么只好在宿主机创建一个脚本，然后复制到镜像里执行了
# RUN sh -c 'echo "192.168.0.101 node101" >> /etc/hosts'
# RUN chmod a+x /myappsh/my1.sh &&  /myappsh/my1.sh
# 最终是： docker run --add-host=node101:192.168.0.101

# CMD命令只在docker run生效，配合ENTRYPOINT使用
CMD ["/myappjar/app.jar","--spring.application.logdir=/myapplog"]

# 运行容器后最先执行的命令 配合CMD后最终的命令： java -jar /myappjar/springboot-mysql-curd-0.0.1-SNAPSHOT.jar --spring.application.logdir=/home/shenshuxin/entrypointlog
ENTRYPOINT ["java","-jar"]

# 最终执： docker run -p 8080:8080 --name myspringdemoapp -v 宿主机日志路径:/myapplog 镜像ID
